Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра САПР
ЗВІТ
про виконання лабораторної роботи №2
на тему: «Прямий метод доступу до файлів на зовнішніх запам’ятовуючих пристроях»
з курсу: «Організація баз даних і знань»
Львів 2008
Тема роботи
Прямий метод доступу до файлів на зовнішніх запам’ятовуючих пристроях
Мета роботи
Розглянути органiзацiю i ведення файлів прямого доступу; набути практичні навички у програмуванні алгоритмів доступу з хешуванням.
Лабораторне завдання
Тема завдання: Персонал школи
1. Написати програму методу зв’язаних блоків, яка реалізує такі функції:
1. Друк бази даних.
2. Зчитування запису.
3. Введення запису.
4. Видалення запису.
5. Модифікація запису.
6. Пошук запису.
7. Вихід.
Короткі теоретичні відомості
Текст програми
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct DB
{
int id;
char name[12];
char lname[9];
char pname[13];
char datan[11];
char posada[10];
char tel[9];
float zarplata;
};
struct DB db1,db2;
FILE *f1;
char fn[50]="db2.txt";
int h(int param)
{
int k;
k=param%10;
return k*sizeof(struct DB)*10;
}
void insert()
{
int hesh,o;
printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ ");
scanf("%d", &db1.id);
while (db1.id!=0)
{
o=0;
hesh=h(db1.id);
fseek(f1,hesh, SEEK_SET);
fread(&db2, sizeof(struct DB),1,f1);
while((db2.id>0)&&(o<10))
{
if(db2.id==db1.id)
{
printf("\n***ERROR:Zapus z ID %d vze isnuje!!\nVvedit inshyj ID\n",db1.id);
goto error;
}
hesh=hesh+sizeof(struct DB);
fseek(f1, hesh, SEEK_SET);
fread(&db2, sizeof(struct DB),1,f1);
o++;
}
fseek(f1, hesh, SEEK_SET);
if (o<=10)
{
printf("Uvedit'\nPrizvyshche(11), Imja(8), Po-bat'kovi(12), d/n(10), posadu(9), telefon(8), zarplatu\n");
scanf("%s%s%s%s%s%s%f", db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
fwrite(&db1, sizeof(struct DB), 1, f1);
printf("***Zapys dodano***\n");
}
error:
printf("Uvedit' ID\nІ ");
scanf("%d", &db1.id);
}
}
void ins2()
{
int hesh=0,i;
fseek(f1,0, SEEK_SET);
fwrite(&db2, sizeof(struct DB),1,f1);
for(i=0;i<100;i++)
{
hesh=hesh+sizeof(struct DB);
fseek(f1, hesh, SEEK_SET);
fwrite(&db2, sizeof(struct DB),1,f1);
}
}
void vyvid()
{
int i,j=0,k=0,l=0;
clrscr();
fseek(f1,0, SEEK_SET);
fread(&db2,sizeof(struct DB),1,f1);
for(i=1;i<=100;i++)
{
if (k==0)
{
getch();
clrscr();
printf(" єBLOK N%dє\n",j);
printf("ЙННННЛНННННННННННЛННННННННЛНННННННННКННЛННННКНННННЛНННННННННЛННННННННЛННННННННН»");
printf("є IDєPRIZVYSHCHEєIMJA єPO-BAT'KOVI єDATA NAR. єPOSADA єTELEFON єZARPLATA є");
printf("МННННОНННННННННННОННННННННОННННННННННННОННННННННННОНННННННННОННННННННОННННННННН№");
}
printf("є%4dє%-11sє%-8sє%-12sє%-10sє%-9sє%-8sє%9.2fє",db2.id, db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, db2.zarplata);
if(l<9)
printf("ЗДДДДЧДДДДДДДДДДДЧДДДДДДДДЧДДДДДДДДДДДДЧДДДДДДДДДДЧДДДДДДДДДЧДДДДДДДДЧДДДДДДДДД¶");
fseek(f1,i*sizeof(struct DB), SEEK_SET);
fread(&db2,sizeof(struct DB),1,f1);
k=i%10;
j=i/10;
l++;
if(l==10)
{
printf("ИННННКНННННННННННКННННННННКННННННННННННКННННННННННКНННННННННКННННННННКНННННННННј");
l=0;
}
}
getch();
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
void del()
{
struct DB db2={0, NULL, NULL, NULL, NULL, NULL, NULL, 0.00};
int hesh,o,id;
printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ ");
scanf("%d", &id);
while (id>0)
{
o=0;
hesh=h(id);
fseek(f1,hesh, SEEK_SET);
fread(&db1, sizeof(struct DB),1,f1);
while((db1.id!=id)&&(o<10))
{
hesh=hesh+sizeof(struct DB);
fseek(f1, hesh, SEEK_SET);
fread(&db1, sizeof(struct DB),1,f1);
o++;
}
fseek(f1,...